﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RRD.Model;

namespace RRD.Controller
{
    public enum StateEnum
    {
        Open,
        ReadyToOpen,
        Close
    };

    public class State
    {
        private StateEnum _truckState = StateEnum.Close;
        private string _truckNumber = string.Empty;
        Logger logger = new Logger();      

        public Message OpenTruck()
        {
            Message value = new Message();
            switch (_truckState)
            {
                case StateEnum.Open:
                    value.MessageValue = "Błąd - ciężarówka jest już otwarta";
                    value.MessageType = MessageType.Error;
                    break;
                case StateEnum.ReadyToOpen:
                    value.MessageValue="Błąd - Zeskanuj kod ciężarówki";
                    value.MessageType = MessageType.Error;
                    break;
                case StateEnum.Close:
                    value.MessageValue="Zeskanuj kod ciężarówki";
                    value.MessageType = MessageType.Message;
                    _truckState = StateEnum.ReadyToOpen;
                    break;
            }
            return value;
        }

        public string CloseTruck()
        {
            string value = string.Empty;
            switch (_truckState)
            {
                case StateEnum.Open:
                    value = "Ciężarówka jest zamknięta";
                    _truckState = StateEnum.Close;
                    break;
                case StateEnum.ReadyToOpen:
                    value = "Ciężarówka jest zamknięta";
                    _truckState = StateEnum.Close;
                    break;
                case StateEnum.Close:
                    value = "Błąd - Ciężarówka jest już zamknięta"; 
                    break;
            }
            return value;
        }

        public Message SetTruckNumber(string truckNumber)
        {
            Message value = new Message();
            switch (_truckState)
            {
                case StateEnum.Open:
                    value.MessageValue = "Błąd - ciężarówka jest już otwarta";
                    value.MessageType = MessageType.Error;
                    break;
                case StateEnum.ReadyToOpen:
                    value.MessageValue = string.Format("Cięzarówka {0} jest otwarta",truckNumber);
                    value.MessageType = MessageType.Message;
                    _truckState = StateEnum.Open;
                    break;
                case StateEnum.Close:
                    value.MessageValue = "Błąd - Ciężarówka jest zamknięta";
                    value.MessageType = MessageType.Error;
                    break;
            }
            return value;
        }

        public StateEnum GetStatus()
        {
            var value = StateEnum.Close;
            try
            {
                value = _truckState;
            }
            catch (Exception ex)
            {
                logger.WriteLog(ex.Message);
            }
            return value;
        }
        
        internal string GetTruckNumber()
        {
            string value = string.Empty;
            value = _truckNumber;
            return value;
        }
    }
}
